package com.cy.pj.sys.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.cy.pj.common.exception.ServiceException;
import com.cy.pj.common.vo.CheckBox;
import com.cy.pj.common.vo.PageObject;
import com.cy.pj.sys.dao.BasePageDao;
import com.cy.pj.sys.dao.SysRoleDao;
import com.cy.pj.sys.dao.SysRoleMenuDao;
import com.cy.pj.sys.dao.SysUserRoleDao;
import com.cy.pj.sys.entity.SysRole;
import com.cy.pj.sys.service.SysRoleService;
import com.cy.pj.sys.vo.SysRoleMenuVo;

@Service
public class SysRoleServiceImpl extends BasePageServiceImpl<SysRole> implements SysRoleService {

	//	@Autowired
	private SysRoleDao sysRoleDao;
	private SysRoleMenuDao sysRoleMenuDao;
	private SysUserRoleDao sysUserRoleDao;


	@Autowired
	public SysRoleServiceImpl(
			SysRoleDao sysRoleDao,
			SysRoleMenuDao sysRoleMenuDao,
			SysUserRoleDao sysUserRoleDao) {
		super(sysRoleDao);
		this.sysRoleDao=sysRoleDao;
		this.sysRoleMenuDao=sysRoleMenuDao;
		this.sysUserRoleDao=sysUserRoleDao;
	}

	//	@Override
	//	public PageObject<SysRole> findPageObjects(String name, Integer pageCurrent) {
	//		if (pageCurrent==null||pageCurrent<1) {
	//			throw new IllegalArgumentException("当前页码不正确");
	//		}
	//		int rowCount=sysRoleDao.getRowCount(name);
	//		if (rowCount==0) {
	//			throw new ServiceException("没有找到记录");
	//		}
	//		int pageSize=4;
	//		int startIndex=(pageCurrent-1)*pageSize;
	//		List<SysRole> records=
	//				sysRoleDao.findPageObjects(name, startIndex, pageSize);
	//		PageObject<SysRole> pageObject=new PageObject<>();
	//		pageObject.setPageCurrent(pageCurrent);
	//		pageObject.setPageSize(pageSize);
	//		pageObject.setRowCount(rowCount);
	//		pageObject.setRecords(records);
	//		pageObject.setPageCount((rowCount-1)/pageSize+1);
	//		return pageObject;
	//	}

	@Override
	public int deleteObject(Integer id) {
		if (id==null||id<1) {
			throw new ServiceException("id的值不正确,id="+id);
		}
		sysRoleMenuDao.deleteObjectsByRoleId(id);
		sysUserRoleDao.deleteObjectsByRoleId(id);
		int rows=sysRoleDao.deleteObject(id);
		if (rows==0) {
			throw new ServiceException("数据可能已经不存在");
		}
		return rows;
	}

	@Override
	public int saveObject(SysRole entity, Integer[] menuIds) {
		if(entity==null) {
			throw new ServiceException("保存数据不能为空");
		}
		if(StringUtils.isEmpty(entity.getName())) {
			throw new ServiceException("角色名不能为空");
		}
		if(menuIds==null||menuIds.length==0) {
			throw new ServiceException("必须为角色赋予权限");
		}
		int rows=sysRoleDao.insertObject(entity);
		sysRoleMenuDao.insertObjects(entity.getId(), menuIds);
		return rows;
	}

	@Override
	public SysRoleMenuVo findObjectById(Integer id) {
		if (id==null||id<=0) {
			throw new ServiceException("id的值不合法");
		}
		SysRoleMenuVo result=sysRoleDao.findObjectById(id);
		if (result==null) {
			throw new ServiceException("此记录已经不存在");
		}
		return result;
	}

	@Override
	public int updateObject(SysRole entity, Integer[] menuIds) {
		if(entity==null) {
			throw new ServiceException("更新的对象不能为空");
		}
		if(entity.getId()==null) {
			throw new ServiceException("id的值不能为空");
		}
		if(StringUtils.isEmpty(entity.getName())) {
			throw new ServiceException("角色名不能为空");
		}
		if(menuIds==null||menuIds.length==0) {
			throw new ServiceException("必须为角色指定一个权限");
		}
		int rows=sysRoleDao.updateObject(entity);
    	if(rows==0) {
    		throw new ServiceException("对象可能已经不存在");
    	}
    	sysRoleMenuDao.deleteObjectsByRoleId(entity.getId());
    	sysRoleMenuDao.insertObjects(entity.getId(),menuIds);
		return rows;
	}
	
	@Override
	public List<CheckBox> findObjects() {
		return sysRoleDao.findObjects();
	}

}
